package 数组;


/**
 * Description :
 *
 * @author XXXXXXXXXX<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2021年12月29日<br>
 * @see 数组 <br>
 */
public class _108_将有序数组转换为二叉搜索树 {
    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
    /**
     * 给你一个整数数组 nums ，其中元素已经按 升序 排列，请你将其转换为一棵 高度平衡 二叉搜索树。
     * <p>
     * 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
     */
    class Solution {
        public TreeNode sortedArrayToBST(int[] nums) {
            return helper(nums, 0, nums.length);
        }

        private TreeNode helper(int[] nums, int begin, int end) {
            if (begin == end) return null;
            int mid = (end - begin) / 2 + begin;
            return new TreeNode(nums[mid], helper(nums, begin, mid), helper(nums, mid + 1, end));
        }
    }
}
